const http2 = require('http2');
const {
    HTTP2_HEADER_METHOD,
    HTTP2_HEADER_PATH,
    HTTP2_HEADER_STATUS,
    HTTP2_HEADER_CONTENT_TYPE
} = http2.constants;
const server = http2.createServer((request, response) => {
    console.log('Se conecto un cliente');
    request.on('end', () => {
        console.log('El cliente se desconecto');
    });
    request.on('error', (err) => {
        console.log('Ocurrió un error al procesar la solicitud', err);
    });
});
server.on('error', (err) => {
    console.error('Ocurrió un error', err);
});
server.on('stream', (stream, headers, flags) => {
    const method = headers[HTTP2_HEADER_METHOD];
    const path = headers[HTTP2_HEADER_PATH];

    console.table(
        [
            { accion: 'method', valor: method },
            { accion: 'path', valor: path }
        ]);

    stream.respond({
        [HTTP2_HEADER_STATUS]: 200,
        [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain'
    });

    stream.write('Ejemplo HTTP versión 2');
    stream.end('Node.js');
});
const port = 15500;
server.listen(port, () => {
    console.log(`El servidor esta escuchando en el puerto ${port}`);
});

http2.createServer(options[, onRequestHandler])
http2.createSecureServer(options[, onRequestHandler])

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
cd 'C:\Program Files\OpenSSL-Win64\bin'
./openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout C:\Temp\key.pem -out C:\Temp\cert.pem

const http2 = require('http2');
const fs = require('fs');
const {
    HTTP2_HEADER_CONTENT_TYPE,
    HTTP2_HEADER_METHOD,
    HTTP2_HEADER_PATH,
    HTTP2_HEADER_STATUS
} = http2.constants;
const server = http2.createSecureServer({
    key: fs.readFileSync('./certs/key.pem'),
    cert: fs.readFileSync('./certs/cert.pem')
});
server.on('error', (err) => {
    console.error('Ocurrió un error', err);
});
server.on('stream', (stream, headers) => {
    const method = headers[HTTP2_HEADER_METHOD];
    const path = headers[HTTP2_HEADER_PATH];

    console.table(
        [
            { accion: 'method', valor: method },
            { accion: 'path', valor: path }
        ]);

    stream.respond({
        [HTTP2_HEADER_CONTENT_TYPE]: 'text/html',
        [HTTP2_HEADER_STATUS]: 200
    });

    stream.write('<!doctype html>\n');
    stream.end(`<html>
    <head>
        <title>Prueba de servidor HTTP seguro con Node.js</title>
        <script>
            function saludo() {
                alert('Hola mundo');
            }
        </script>
    </head>
    </body>
        <h1>Prueba de p&aacute;gina Web</h1>
        <h2>con Node.js HTTPS</h2>
        <input type='button' value='Mensaje' onClick='javascript:saludo();' />
    </body>
</html>`);
});
const port = 8443;
server.listen(port, () => {
    console.log(`El servidor SEGURO esta escuchando en el puerto ${port}`);
});
server.on('stream', (stream, headers) => {
    const responseBody = [
        { prop1: 1, prop2: 'Hola 1' },
        { prop1: 2, prop2: 'Hola 2' },
        { prop1: 3, prop2: 'Hola 3' },
    ];

    stream.respond({
        'content-type': 'application/json',
        ':status': 200
    });
    const resp = JSON.stringify(responseBody);
    stream.end(resp);
});